const app = getApp()
// 将 cart 解构出来使用
const { cart } = app.globalData

// 导入封装的本地存储的方法
import { saveCart } from './storage.js'

// 将商品添加到购物车
export const addGoodsToCart = (goodsInfo) => {
  // 防重复添加，如果用户对同一个商品添加多次，
  // 我们希望 count 值进行 + 1，并不是把这个商品再次添加到 cart 中
  const index = cart.findIndex(item => item.id === goodsInfo.goods_id)

  if (index !== -1) {
    cart[index].count++
    setCatToStorage()
    return
  }

  // 这一步已经获取到需要添加到全局购物车列表的商品数据
  // 在这个方法中将数据去追加到全局的 cart
  const info = {
    // 商品Id
    id: goodsInfo.goods_id,
    // 名称
    name: goodsInfo.goods_name,
    // 图片
    pic: goodsInfo.goods_small_logo,
    // 价格
    price: goodsInfo.goods_price,
    // 数量
    count: 1,
    // 是否默认被选中
    isCheck: true
  }

  cart.push(info)
  setCatToStorage()
}

// 更改购买商品的数量
export const updateGoodsCount = (goodsId, goodsCount) => {
  const index = cart.findIndex(item => item.id === goodsId)

  if (index !== -1) {
    cart[index].count = goodsCount
    setCatToStorage()
  }
}

// 更改商品状态的方法
export const updateGoodsStatus = (goodsId, goodsIsCheck) => {
  const index = cart.findIndex(item => item.id === goodsId)

  if (index !== -1) {
    cart[index].isCheck = goodsIsCheck
    setCatToStorage()
  }
}

// 删除购物车商品
export const removeGoodsById = goodsId => {
  const index = cart.findIndex(item => item.id === goodsId)

  if (index !== -1) {
    cart.splice(index, 1)
    setCatToStorage()
  }
}

// 更改所有商品的状态
export const updateAllGoodsStatus = goodsIsCheck => {
  cart.forEach(item => {
    item.isCheck = goodsIsCheck
  })

  setCatToStorage()
}

// 设置角标
const renderCartBadge = () => {
  let count = 0

  cart.forEach(item => {
    if (item.isCheck) {
      count += item.count
    }
  })

  getApp().globalData.total = count

  uni.setTabBarBadge({
    index: 3,
    text: count + ''
  })
}

const setCatToStorage = () => {
  saveCart('cart', cart)
  renderCartBadge()
}
